guttenplagwikiaorg_de-20200215-history
Benutzer Diskussion:Barcode
Hi, GuttenPlag Wiki freut sich, dass du zu uns gestoßen bist! Danke für deine Bearbeitung auf der Seite Datei:Barcode.svg. Falls du irgendwelche Hilfe brauchen solltest, kannst du mir gerne eine Nachricht auf meiner Diskussionsseite hinterlassen! -- NablaOperator (Diskussion) 12:56, 21. Feb. 2011 Script für SVG-Grafik Hi. Magst Du das Script online stellen, das Du für die Erstellung des Barcodes verwendet hast? Wäre sehr hilfreich für uns. PlagDoc 21:43, 2. Mär. 2011 (UTC) Hey, ich kopiers hier mal einfach rein, braucht python + matplotlib aber auf jedem linux zumindest in den repositories, matplotlib spuckt auch pdf und so aus, das ist kein problem, einfach FILE= ändern. Das skript benutzt allerdings noch die fundstellenliste. Noch eine Sache, im code steht: + range(199, 215), das fügt die seiten 199-214 (nicht 215) hinzu, die meine ich von dem Wissenschaftlichen Dienst waren, aber in der Fundstellenliste nicht auftauchen, das muss eventuell im Skript oder anders angepasst werden. #!/usr/bin/env python #-*- coding:utf-8 -*- __licence__ = 'PD/CC-0' import datetime LEGEND = True FILE = 'barcode.svg' # Hier ist die Zeit die draufsteht, wenn None, dann holt er die letzte edit Zeit. last_edited = datetime.datetime(day=21, month=2, year=2011, hour=19, minute=30) last_edited = None # Wenn sachen nicht in der fundstelle drin sind, dann bei dem + range(199, 214) mit + ... hinzufuegen... aa = True if not FILE.endswith('.png') else True import sys try: from matplotlib import pyplot as plt import numpy as np except: print 'Importing matpltolib failed, on a typical linux distribution: sudo apt-get install python-matplotlib' sys.exit(1) import datetime, pytz import urllib f = urllib.urlopen("http://de.guttenplag.wikia.com/wiki/Fundstellenliste") s = f.read() import re plagiert = re.compile('Seiten, auf denen Plagiate gefunden wurden:.+? \\[(?P^\\]+)', re.DOTALL) multies = re.compile('Seiten, auf denen Plagiate mehrerer verschiedener Quellen zu finden sind:.+? \\[(?P^\\]+)', re.DOTALL) ignore = re.compile('Seiten, die nicht in die Prozentberechnung mit einbezogen werden:.+? \\[(?P^\\]+)', re.DOTALL) if last_edited is None: last_edited = re.compile("""Bearbeitet """) last_edited = last_edited.findall(s) if len(last_edited) != 1: print 'Found more then one edititing!?' sys.exit(1) last_edited = datetime.datetime.utcnow().strptime(last_edited0.replace('Z', 'UTC'), '%Y-%m-%dT%H:%M:%S%Z') last_edited = last_edited.replace(tzinfo=pytz.timezone('UTC')) print last_edited, last_edited.tzname(), last_edited.tzinfo german_time = pytz.timezone('Europe/Berlin') last_edited = german_time.normalize(last_edited.astimezone(german_time)) plagiert = plagiert.findall(s)0 multies = multies.findall(s)0 ignore = ignore.findall(s)0 plagiert = list(set(for i in re.split('[^\d+', plagiert)] + range(199, 215))) # multies = for i in re.split('[^\d+', multies)] ignore = for i in re.split('[^\d+', ignore)] plagiert.sort() # just i case. multies.sort() ignore.sort() print plagiert print multies print ignore print '---------------------------------------' # create correct ranges pages = 475 if not LEGEND: plt.figure(figsize=(8, 2)) plt.subplots_adjust(bottom=0.2, top=0.85, left=0.02, right=0.98) else: plt.figure(figsize=(8, 3.2)) plt.subplots_adjust(bottom=0.6, top=0.9, left=0.02, right=0.98) p_s = plagiert0:1 + [plagierti for i in xrange(1,len(plagiert)) if plagierti-1 + 1 != plagierti] m_s = multies0:1 + [multiesi for i in xrange(1,len(multies)) if multiesi-1 + 1 != multiesi] i_s = ignore0:1 + [ignorei for i in xrange(1,len(ignore)) if ignorei-1 + 1 != ignorei] p_e = [plagierti for i in xrange(0,len(plagiert)-1) if plagierti+1 - 1 != plagierti] + plagiert-1: m_e = [multiesi for i in xrange(0,len(multies)-1) if multiesi+1 - 1 != multiesi] + multies-1: i_e = [ignorei for i in xrange(0,len(ignore)-1) if ignorei+1 - 1 != ignorei] + ignore-1: p_l = None m_l = None i_l = None for p in zip(p_s, p_e): p_l = plt.fill([p0, p1+1, p1+1, p0], 0,0,1,1, aa=aa, fc='k', ec='none', label=u'Seiten, auf denen Plagiate gefunden wurden' if p_l is None else None) for p in zip(m_s, m_e): m_l = plt.fill([p0, p1+1, p1+1, p0], 0,0,1,1, aa=aa, fc='r', ec='none', label=u'Seiten mit Plagiaten aus mehreren Quellen' if m_l is None else None) #print 'Plotten für den "wahrscheinlich" von Dr.Dr. Tamme übernommen Bereich, Seiten 199-214. 213 ist trotzdem ein richtiges?' #plt.fill(214+1, 214+1, 199, 0,0,1,1, fc='y', aa=aa, ec='none', alpha=0.5, label=u'Vermutlich aus Inhalten des Wissenschaftlichen Dienstes des Bundestages übernommen\n(nicht belegbar da Quellen nicht öffentlich und nicht zur Gesamtzahl gerechnet)') # dummy, für die Legende... plt.fill(0,0,0,0, -1,-1,-1,-1, fc='w', ec='k', label='Seiten, auf denen bisher keine Plagiate gefunden wurden') for p in zip(i_s, i_e): i_l = plt.fill([p0, p1+1, p1+1, p0], 0,0,1,1, fc=np.array(222, 247.0)/255, ec='none', label=u'Inhaltsverzeichnis (Seiten 1-14) und Anhänge (ab Seite 408) wurden bei der Berechnung\ndes Prozentualwertes nicht mit einbezogen' if i_l is None else None) if LEGEND: plt.legend(loc='upper center', bbox_to_anchor=-0.45, prop={'size': 11}) plt.xlim(1, 476) plt.ylim(0, 1) plt.yticks([]) plt.xticks(range(50, pages+1, 50)) plagiats = sum(1 for i in xrange(1, pages+1) if (i in plagiert or i in multies) and i not in ignore) total = sum(1 for i in xrange(1, pages+1) if i not in ignore) plt.title(u'Anzahl Seiten, auf denen bisher Plagiate gefunden wurden: %s, d.h. %s%%' % (plagiats, ('%2.2f' % round(plagiats*100./total, 2)).replace('.', ',')), size=13) plt.xlabel(u'Seitenzahl') plt.text(0.99, 0.01, 'Stand: %s' % last_edited.strftime('%d.%m.%Y %H:%M'), horizontalalignment='right', verticalalignment='bottom', transform=plt.gcf().transFigure) plt.text(0.01, 0.01, 'Quelle: http://de.guttenplag.wikia.com/', horizontalalignment='left', verticalalignment='bottom', transform=plt.gcf().transFigure) #print plagiats, total print print 'Stand vom %s' % last_edited.strftime('%d.%m.%Y %H:%M') print 'Prozentzahl plagiert ("exakt"):', plagiats * 100. / total print 'Ich kann auch .pdf, einfach im code mit Texteditor ändern.' # Hier kann auch .pdf, etc. hin: plt.savefig(FILE, dpi=None if not FILE.endswith('.png') else 76.2) #plt.show() Lizenz ? Hi, magst Du Deinen Code unter einer netten Open-Source-Lizenz, am Besten PD/CC-0 veröffentlichen? Momentan steht er (formal) unter der CC-BY-SA, was für Code nicht perfekt ist. Hast Du evtl. Lust, dich an Animierter_Barcode zu versuchen? Danke schonmal. PlagDoc 23:03, 2. Mär. 2011 (UTC) Jo, nicht dran gedacht, ist PD/CC-0, ich denke mal das reicht so :). Mit animert werde ich später mal gucken, die liste ist ja einfach zu parsen, sollte ja nicht viel aufwand sein. Barcode 09:57, 3. Mär. 2011 (UTC) Skript für Animierten Barcode Ich habe mal ein skript für animierten Barcode gemacht, das antiaaliasing ist noch etwas dumm, kann man ausmachen, aber dann "wackelt" es auch unterumständen mal... die breite vernünftig zu wählen kann im prinzip über die dpi gemacht werden... Ich weiß nicht wie das mit hochladen von videos an sich hier ist. Barcode 16:45, 3. Mär. 2011 (UTC) #!/usr/bin/env python #-*- coding:utf-8 -*- __licence__ = 'PD/CC-0' import datetime LEGEND = True FILE = 'barcode.png' # Hier ist die Zeit die draufsteht, wenn None, dann holt er die letzte edit Zeit. aa = True import sys try: from matplotlib import pyplot as plt import numpy as np except: print 'Importing matpltolib failed, on a typical linux distribution: sudo apt-get install python-matplotlib' sys.exit(1) import urllib f = urllib.urlopen("http://de.guttenplag.wikia.com/wiki/ErstellungsdatumEinzelseiten") s = f.read() import re data = re.compile('span class="mw-headline" id="chronologische_Sortierung">.*span class="mw-headline" id="Rohdaten.2C_nicht_aufbereitet">', re.DOTALL) data = data.findall(s)0 seiten = re.compile('Seite_(?P\d+);(?P\d+).(?P\d+).(?P\d+);(?P\d+):(?P\d+):(?P\d+);\d+') seiten = seiten.findall(data) #print datetime.datetime(*int(i) for i in p[1: for p in seiten]0) dates = np.array([datetime.datetime(*for i in p[1:]) for p in seiten]) seiten = np.array([int(p0) for p in seiten]) print seiten print dates print '---------------------------------------' # create correct ranges pages = 475 import tempfile import os tempdir = tempfile.NamedTemporaryFile().name os.mkdir(tempdir) # Not efficient, but who cares: currtime = min(dates) currtime = currtime.replace(minute=0, second=0) newest = max(dates) + datetime.timedelta(days=0, hours=1) newest = newest.replace(minute=0, second=0) frame = 0 if not LEGEND: plt.figure(1, figsize=(8, 2)) plt.subplots_adjust(bottom=0.2, top=0.85, left=0.02, right=0.98) else: plt.figure(1, figsize=(8, 3.2)) plt.subplots_adjust(bottom=0.6, top=0.9, left=0.02, right=0.98) while currtime < newest: plt.clf() plagiert = seiten< currtime plagiert.sort() multies = plagiert:-1[(plagiert:-1 plagiert1:)] plagiert = np.unique1d(plagiert) multies = np.unique1d(multies) plagiert.sort() multies.sort() ignore = range(1, 15) + range(408, 476) plagiert = list(plagiert) multies = list(multies) p_s = plagiert0:1 + [plagierti for i in xrange(1,len(plagiert)) if plagierti-1 + 1 != plagierti] m_s = multies0:1 + [multiesi for i in xrange(1,len(multies)) if multiesi-1 + 1 != multiesi] i_s = ignore0:1 + [ignorei for i in xrange(1,len(ignore)) if ignorei-1 + 1 != ignorei] p_e = [plagierti for i in xrange(0,len(plagiert)-1) if plagierti+1 - 1 != plagierti] + plagiert-1: m_e = [multiesi for i in xrange(0,len(multies)-1) if multiesi+1 - 1 != multiesi] + multies-1: i_e = [ignorei for i in xrange(0,len(ignore)-1) if ignorei+1 - 1 != ignorei] + ignore-1: p_l = None m_l = None i_l = None for p in zip(p_s, p_e): p_l = plt.fill([p0, p1+1, p1+1, p0], 0,0,1,1, aa=aa, fc='k', ec='none') for p in zip(m_s, m_e): m_l = plt.fill([p0, p1+1, p1+1, p0], 0,0,1,1, aa=aa, fc='r', ec='none') #print 'Plotten für den "wahrscheinlich" von Dr.Dr. Tamme übernommen Bereich, Seiten 199-214. 213 ist trotzdem ein richtiges?' #plt.fill(214+1, 214+1, 199, 0,0,1,1, fc='y', aa=aa, ec='none', alpha=0.5, label=u'Vermutlich aus Inhalten des Wissenschaftlichen Dienstes des Bundestages übernommen\n(nicht belegbar da Quellen nicht öffentlich und nicht zur Gesamtzahl gerechnet)') # dummy, für die Legende... plt.fill(0,0,0,0, -1,-1,-1,-1, fc='k', ec='k', label=u'Seiten, auf denen Plagiate gefunden wurden') plt.fill(0,0,0,0, -1,-1,-1,-1, fc='r', ec='k', label=u'Seiten mit Plagiaten aus mehreren Quellen') plt.fill(0,0,0,0, -1,-1,-1,-1, fc='w', ec='k', label='Seiten, auf denen bisher keine Plagiate gefunden wurden') plt.fill(0,0,0,0, -1,-1,-1,-1, fc=np.array(222, 247.0)/255, ec='k', label=u'Inhaltsverzeichnis (Seiten 1-14) und Anhänge (ab Seite 408) wurden bei der Berechnung\ndes Prozentualwertes nicht mit einbezogen') for p in zip(i_s, i_e): i_l = plt.fill([p0, p1+1, p1+1, p0], 0,0,1,1, fc=np.array(222, 247.0)/255, ec='none') if LEGEND: plt.legend(loc='upper center', bbox_to_anchor=-0.45, prop={'size': 11}) plt.xlim(1, 476) plt.ylim(0, 1) plt.yticks([]) plt.xticks(range(50, pages+1, 50)) plagiats = sum(1 for i in xrange(1, pages+1) if (i in plagiert or i in multies) and i not in ignore) total = sum(1 for i in xrange(1, pages+1) if i not in ignore) plt.title(u'Anzahl Seiten, auf denen bisher Plagiate gefunden wurden: %s, d.h. %s%%' % (plagiats, ('%2.2f' % round(plagiats*100./total, 2)).replace('.', ',')), size=13) plt.xlabel(u'Seitenzahl') plt.text(0.99, 0.01, 'Stand: %s' % currtime.strftime('%d.%m.%Y %H:%M'), fontdict={'color': 'g'}, horizontalalignment='right', verticalalignment='bottom', transform=plt.gcf().transFigure) plt.text(0.01, 0.01, 'Quelle: http://de.guttenplag.wikia.com/', horizontalalignment='left', verticalalignment='bottom', transform=plt.gcf().transFigure) #print plagiats, total print print 'Stand vom %s' % currtime.strftime('%d.%m.%Y %H:%M') print 'Prozentzahl plagiert ("exakt"):', plagiats * 100. / total print 'Ich kann auch .pdf, einfach im code mit Texteditor ändern.' # Hier kann auch .pdf, etc. hin: plt.savefig(tempdir + os.path.sep + '%03i_' % frame + FILE, dpi=None if not FILE.endswith('.png') else 100) #plt.show() currtime += datetime.timedelta(days=0, hours=1) frame += 1 print tempdir #os.system('convert *.svg .png') os.system('mencoder mf://%s/*.png -mf w=720:h=288:fps=25:type=png -ovc x264 -oac copy -o barcode.avi' % tempdir) os.system('rm -rf %s' % tempdir)